#! -*- coding: utf-8 -*-

from django import forms
from django.shortcuts import render_to_response, get_object_or_404
from django.http import HttpResponseRedirect, HttpResponse
from django.core.urlresolvers import reverse
from django.forms import ModelForm
from django.template import RequestContext
from flisol_system.configuration.models import FlisolManager, PageData
from django.http import Http404

from models import Participante, Proposta, Palestra

from string import Template

from django.forms.models import BaseModelFormSet
from django.forms.models import modelformset_factory

class InscricaoModelForm(ModelForm):
    ''' Acrescentei o método construtor __init__ e todo o código dele para alterar as propriedade 
    do ManyToManyField além de poder alterar o texto de ajuda '''
    
#    def __init__(self, *args, **kwargs):
#        disponiveis = []
#        for palestra in Palestra.objects.all():
#            quantidade = palestra.vagas - Participante.objects.filter(palestras__id=palestra.id).count()
#            if quantidade > 0:
#                disponiveis.append((palestra.id, palestra.titulo))
#        #self.base_fields['palestras'].widget = forms.CheckboxSelectMultiple(choices=disponiveis)
#        self.base_fields['palestras'].widget = forms.CheckboxSelectMultiple(queryset=Palestra.objects.all())
#        self.base_fields['palestras'].help_text = 'Marque as palestras que você quer participar. \
#            #Obs: Verifique os horários conflitantes antes de escolher.<br>'
#        super(InscricaoModelForm, self).__init__(*args, **kwargs)
#
    class Meta:
        model = Participante
        fields = ('nome','email','palestras','instalar')

def inscricao(request):

    data = PageData()
    erro = False

    if request.method=='POST':
        form = InscricaoModelForm(request.POST)
        
        erro_repetidos = []
        erro_acabou = []

        try:     
            escolhas = dict(form.data)['palestras']
        except:
            pass
        else:
            palestras = Palestra.objects.filter(id__in=escolhas)
            
            for i in palestras:
                for j in palestras:
                    if i.id != j.id and i.horario == j.horario:
                        erro_repetidos.append(i.titulo)

            for i in palestras:
                if i.vagas - Participante.objects.filter(palestras__id=i.id).count() <= 0 :
                    erro_acabou.append(i.titulo[0:20])

        if form.is_valid() and not erro_repetidos and not erro_acabou:
            form.save()
            sucesso = True
            form = InscricaoModelForm()
        else:
            erro = True
    else:
#        form = InscricaoModelForm()
        print 'passei'
        participanteFormset = modelformset_factory(Participante)
        form = participanteFormset(queryset=Participante.objects.filter(id=5))

    esgotadas = []
    for i in Palestra.objects.all():
        quantidade = i.vagas - Participante.objects.filter(palestras__id=i.id).count()
        if quantidade <= 0:
            esgotadas.append(i.titulo)
    

    form = form.as_table()

    manager = FlisolManager()
    config = manager.getConf()

    closed_msg = config.inscricao_msg
    fechada = config.inscricao == 'F'
    page = 'inscricao.html'
    return render_to_response('index.html', locals(),
                              context_instance=RequestContext(request))


class PropostaModelForm(ModelForm):
    class Meta:
        model = Proposta

def proposta(request):
    if request.method=='POST':
        form = PropostaModelForm(request.POST)
        if form.is_valid():
            form.save()
            sucesso = True
            form = PropostaModelForm()
        else:
            erro = True
    else:
        manager = FlisolManager()
        conf = manager.getConf()
        closed_msg = conf.proposta_msg
        fechada = conf.proposta == 'F'
        form = PropostaModelForm()
    
    data = PageData()
    form = form.as_table()
    page = 'proposta.html'
    return render_to_response('index.html', locals(),
                              context_instance=RequestContext(request))

def histpalestras(request, ano):

    page = 'histpalestras.html'

    conf = FlisolManager.objects.all()
    conf = conf[0]
    ano_vigente = conf.ano

    ano = int(ano)

    if ano > ano_vigente or ano < 2005:
      raise Http404  

    palestras = Palestra.objects.filter(ano=ano)

    ano_anterior = ano - 1
    ano_proximo = ano + 1

    proximo = ano_proximo <= ano_vigente
    anterior = ano_anterior > 2004
    
    data = PageData()
    return render_to_response('index.html', locals(),
                            context_instance=RequestContext(request))

def listaPresenca(request, palestraId):

    participantes = Participante.objects.filter(palestras__id=palestraId)
    palestra = Palestra.objects.get(id=palestraId)

    return render_to_response('lista_presenca.html', locals(),
                            context_instance=RequestContext(request))
